import br.furb.furbot.Direcao;
import br.furb.furbot.ObjetoDoMundoAdapter;
import br.furb.furbot.exceptions.MundoException;

public abstract class ObjetoDoMundoAdapterVeloz extends ObjetoDoMundoAdapter {

    public static final int TECLAESQUERDA = 37;
    public static final int TECLADIREITA = 39;

    private int tempoEspera;

    public int getVelo_cidade() {
        return tempoEspera;
    }

    public void setVelocidade(int velocidade) {
        this.tempoEspera = velocidade;
    }

    private void normalizarVelocidade() {
        setTempoEspera(this.tempoEspera);
    }

    private void zerarVelocidade() {
        this.tempoEspera = getTempoEspera();
        setTempoEspera(0);
    }

    public boolean ehVazio(Direcao direcao) {
        zerarVelocidade();
        boolean ehVazio = super.ehVazio(direcao);
        normalizarVelocidade();
        return ehVazio;
    }

    @Override
    public boolean ehBloqueado() {
        zerarVelocidade();
        boolean ehBloqueado = super.ehBloqueado();
        normalizarVelocidade();
        return ehBloqueado;
    }

    @Override
    public boolean ehFim(Direcao direcao) throws MundoException {
        zerarVelocidade();
        boolean ehFim = super.ehFim(direcao);
        normalizarVelocidade();
        return ehFim;
    }

    @Override
    public boolean ehObjetoDoMundoTipo(String classe, Direcao direcao) {
        zerarVelocidade();
        boolean ehObjetoDoMundoTipo = super.ehObjetoDoMundoTipo(classe, direcao);
        normalizarVelocidade();
        return ehObjetoDoMundoTipo;
    }

    @Override
    public int getUltimaTeclaPress() throws MundoException {
        zerarVelocidade();
        int tecla = super.getUltimaTeclaPress();
        normalizarVelocidade();
        return tecla;
    }
}
